# -*- coding: utf-8 -*-
import json

import requests
from django.shortcuts import render

from .. import models


def interface_list(request):  # 接口列表跳转
    return render(request, 'Page/Interface_List.html')


def interface_perform(request):  # 单条接口执行
    if request.method == "POST":
        in_url = request.POST.get('in_url')
        in_data = request.POST.get('in_data')
        in_expected_result = request.POST.get('in_expected_result')
        in_type = request.POST.get('in_type')
        if in_type == 'POST':
            res = requests.post(url=in_url, data=in_data, json=json.dumps(in_data))
            result = res.json()
            in_data_json = json.dumps(result, indent=4, ensure_ascii=False, sort_keys=True)
            # colorfule_json = highlight(in_data_json,lexers.JsonLexer(),formatters.TerminalFormatter())    # json美化
            in_actual_result = res.status_code  # 获取code对应value值
            if int(in_actual_result) == int(in_expected_result):  # 需要转换为int，虽然看着一样，但类型不同，string类型
                return render(request, 'Page/Interface_Perform.html',
                              {'json_msg': in_data_json, 'headers_msg': res.headers, 'actual_result': in_actual_result,
                               'state': '测试通过！'})
            else:
                return render(request, 'Page/Interface_Perform.html',
                              {'state': '测试不通过,预期结果与实际结果不符！', 'actual_result': in_actual_result})
        elif in_type == 'GET':
            res = requests.get(url=in_url, params=in_data)
            # in_data_json = json.dumps(res, indent=4, ensure_ascii=False, sort_keys=True)
            in_actual_result = res.status_code
            if int(in_actual_result) == int(in_expected_result):
                return render(request, 'Page/Interface_Perform.html',
                              {'json_msg': res, 'headers_msg': res.headers,
                               'actual_result': in_actual_result,
                               'state': '测试通过！'})
            else:
                return render(request, 'Page/Interface_Perform.html',
                              {'json_msg': 'ERROR!预期结果与实际结果不符！' + str(in_actual_result),
                               'state': '测试不通过,预期结果与实际结果不符！',
                               'actual_result': in_actual_result})

        return render(request, 'Page/Interface_Perform.html')
    else:
        return render(request, 'Page/Interface_Perform.html')


"""
   ↓  ↓  ↓  修改接口功能  ↓  ↓  ↓
"""


def update_data_if(request):  # 修改接口信息
    if request.method == "POST":
        id = request.POST.get('data_id')
        field = request.POST.get('field')
        value = request.POST.get('value')
        if field == 'in_id':
            models.Interface_Data.objects.filter(id=id).update(in_id=value)
        elif field == 'in_mname':
            models.Interface_Data.objects.filter(id=id).update(in_mname=value)
        elif field == 'in_type':
            models.Interface_Data.objects.filter(id=id).update(in_type=value)
        elif field == 'in_url':
            models.Interface_Data.objects.filter(id=id).update(in_url=value)
        elif field == 'in_data':
            models.Interface_Data.objects.filter(id=id).update(in_data=value)
        elif field == 'in_data_type':
            models.Interface_Data.objects.filter(id=id).update(in_data_type=value)
        elif field == 'in_tname':
            models.Interface_Data.objects.filter(id=id).update(in_tname=value)
        else:
            models.Interface_Data.objects.filter(id=id).update(in_expected_result=value)
    return render(request, 'Page/Interface_List.html')


"""
   ↓  ↓  ↓  删除接口功能  ↓  ↓  ↓
"""


def batch_perform_if(request):  # 批量执行功能
    if request.method == "POST":
        arr = request.POST.get('arr')
        data = json.loads(arr)
        for i in data:  # 获得列表中的每个字典
            if i['in_type'].upper() == 'POST':
                res = requests.post(url=i['in_url'], data=i['in_data'],
                                    json=json.dumps(i['in_data']))  # 接口执行方法 使用requests库处理接口
                models.Interface_Data.objects.filter(id=i['id']).update(
                    in_actual_result=res.status_code)  # res.status_code获取code对应value值
                continue
            elif i['in_type'].upper() == 'GET':
                res = requests.get(url=i['in_url'], params=i['in_data'])
                models.Interface_Data.objects.filter(id=i['id']).update(in_actual_result=res.status_code)
                continue
        return render(request, 'Page/Perform_Result.html')


def delete_data(request):  # 删除接口信息
    if request.method == "POST":
        data_id = request.POST.get('data_id')  # 获取前端ajax传入的值
        models.Interface_Data.objects.filter(id=data_id).delete()
    return render(request, 'Page/Interface_List.html')


def delete_pj(request):  # 删除项目信息及项目下的接口信息
    if request.method == "POST":
        data_id = request.POST.get('data_id')  # 获取前端ajax传入的值
        models.Project_Data.objects.filter(id=data_id).delete()
        data_list = models.Interface_Data.objects.all().values()
        for i in data_list:  # 获得列表中的每个字典
            for key, value in i.items():  # 获取字典中的每个字段及value
                if key == 'status' and str(value) == data_id and value is not None:  # 只把status存入status_arr列表中
                    models.Interface_Data.objects.filter(status=data_id).delete()  # 当删除项目时将项目下的接口信息一同删除
                else:
                    continue
    return render(request, 'Page/Interface_List.html')


def batch_delete_pj(request):  # 批量删除项目下的接口信息
    if request.method == "POST":
        arr = request.POST.get('arr')  # 获得前端JSON.stringify(data);传回的一个列表
        data = json.loads(arr)  # 将获得到的json数据转化成python类型数据（列表中包含多个字典 type(data)为列表）
        id_arr = []  # 创建一个列表存放解析出来的id
        for i in data:  # 获得列表中的每个字典
            for key, value in i.items():  # 获取字典中的每个字段及value
                if key == 'id':  # 只把id存入id_arr列表中
                    id_arr.append(value)
        for j in id_arr:  # 循环列表按照id值进行删除操作
            models.Project_Data.objects.filter(id=j).delete()
        return render(request, 'Page/Interface_List.html')
    return render(request, 'Page/Interface_List.html')


def batch_delete_if(request):  # 批量删除接口信息
    if request.method == "POST":
        arr = request.POST.get('arr')  # 获得前端JSON.stringify(data);传回的一个列表
        data = json.loads(arr)  # 将获得到的json数据转化成python类型数据（列表中包含多个字典 type(data)为列表）
        id_arr = []  # 创建一个列表存放解析出来的id
        for i in data:  # 获得列表中的每个字典
            for key, value in i.items():  # 获取字典中的每个字段及value
                if key == 'id':  # 只把id存入id_arr列表中
                    id_arr.append(value)
        for j in id_arr:  # 循环列表按照id值进行删除操作
            models.Interface_Data.objects.filter(id=j).delete()
        return render(request, 'Page/Interface_List.html')
    return render(request, 'Page/Interface_List.html')
